Visual C++ MFC的图形绘制

您所在的位置:网站首页 visual studio 画图 Visual C++ MFC的图形绘制

Visual C++ MFC的图形绘制

2024-04-11 10:57| 来源: 网络整理| 查看: 265

Visual C++ MFC的图形绘制 1. 带菜单界面制作

新建一个单文档类型的MFC AppWizard (exe)工程,工程取名为:Graphic。为此程序添加一个子菜单,菜单名称为“绘图”,并为其添加六个菜单项,分别用来控制不同图形的绘制。当用户选择其中的一个菜单项后,程序将按照当前的选择进行相应图形的绘制。添加的六个菜单项的ID及名称如表1所示。然后分别为这六个菜单项添加命令响应,本程序让视类(CGraphicView)对这些菜单命令进行响应,这六个响应函数的名称分别如表1所示 在这里插入图片描述 1.启动Visual C++6.0后,打开【File】(文件)菜单下的【New】(新建)菜单项,选择Project(工程)项。然后选择“MFC AppWizard(exe)”选项,在右边的对话框Project name(工程名称)中输入“Graphic”,在接下来的步骤中依次选择“多重文档”,然后单击【Finish】(完成)按钮。 在这里插入图片描述 在这里插入图片描述 进来之后 在这里插入图片描述 第3步就改一下属性名称就可以了,然后下面就会出现一个方框,同样的点进去,ID,标明直接复制老师给的文档里面的就可以了(有一个会报错,IDM-RECTANGLE,这个不是-而是下滑线_,IDM_RECTANGLE)在这里插入图片描述 全部加完之后就是这样的 在这里插入图片描述 然后在对话框空白处单击右键,选择“ClassWizard”(建立类向导)选项,显示如下所示的“MFC Class Wizard”对话框,选择“Member Maps”选项卡,在“Object Ids”中可以看到对话框界面上的按钮和文本框的ID。选择“IDM_DOT”,单击【Add Variable】,为“IDC_Dot”添加变量(下面几个IDM_XXX,都按上述步骤添加变量)如图: 在这里插入图片描述 在这里插入图片描述 全都填加完后点确定。 然后在FileView–>Header Files –>GraphicView.h(双击),添加一个私有变量,如图: 在这里插入图片描述 然后在FileView–>Header Files –>GraphicView.cpp(双击),找到CGraphicView::CGraphicView()函数,进行初始化 在这里插入图片描述 加完之后往下滑 或者 在Class View –>CGraphicView–>OnDot()(双击) 在这里插入图片描述 从OnDot()开始往下选中,换成如下代码

void CGraphicView::OnDot() { m_nDrawType=1; } void CGraphicView::OnLine() { m_nDrawType=2; } void CGraphicView::OnRectangle() { m_nDrawType=3; } void CGraphicView::OnEllipse() { m_nDrawType=4; } void CGraphicView::OnShanxing() { m_nDrawType=5; } void CGraphicView::OnLianxuxian() { m_nDrawType=6; }

第一步就算完成了。

2. 点、直线、矩形、椭圆的绘制

对于直线、矩形和椭圆,在绘制时都可有两点来确定其图形。当鼠标左击时得到一个点,当鼠标左键松开时得到另外一个点。为视类CGraphicView分别捕获鼠标左键按下和弹起这两个消息。另外当鼠标左键按下时,需要将鼠标当前按下点保存,因此我们为CGraphicView再增加一个CPoint类型的私有成员变量:m_ptOrigin,在视类的构造函数中将此变量初始化为0。在鼠标按下消息响应函数中,保存该点。

在对话框空白处单击右键,选择“ClassWizard”(建立类向导)选项,显示如下所示的“MFC Class Wizard”对话框,选择“Member Maps”选项卡,在“Object Ids”中选 CGraphicView,在Messages里面找到WM_LBUTTONDOWN—>Add Function 再WM_LBUTTONUP–>Add Function(这两个就是鼠标按下跟弹起) 如图:在这里插入图片描述 然后在FileView–>Header Files –>GraphicView.h(双击),再添加一个私有变量,如图: 在这里插入图片描述 然后在FileView–>Header Files –>GraphicView.cpp(双击),找到CGraphicView::CGraphicView()函数,进行初始化在这里插入图片描述 初始化后,直接往下滑到最底,把这两个函数 在这里插入图片描述 改为在这里插入图片描述

void CGraphicView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default m_ptOrigin=point; //保存鼠标按下得到点,也是绘制一个点 CView::OnLButtonDown(nFlags, point); } 在鼠标左键弹起消息响应函数中实现绘图,代码如下: void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default //创建并获得设备描述 CClientDC dc(this); switch (m_nDrawType) { case 1: dc.SetPixel(point,RGB(255,0,0)); /*绘制点*/ break; case 2: /*绘制直线*/ dc.MoveTo(m_ptOrigin);/*调用MoveTo函数移动到原点*/ dc.LineTo(point);/*调用LineTo函数绘制到终点。*/ break; case 3: /*绘制矩形*/ dc.Rectangle(CRect(m_ptOrigin,point)); break; case 4: /*绘制椭圆*/ dc.Ellipse(CRect(m_ptOrigin,point)); break; CView::OnLButtonUp(nFlags, point); } }

如果你复制Word文档里面的代码,会有报错 在这里插入图片描述 位置1:括号要改成英文的 位置2:少了一个反括号 改完后,大家就可以编译运行(Ctrl+F5)了,(因为只有四个函数,所以扇形跟连续线没有实现是画不出来的) 如图: 在这里插入图片描述刚刚有人问我#include"stdafx.h",报错怎么解决。 具体方法还没研究出来,不过有的同学吧这个改成#include"StdAfx.h"就解决了 还有一个方法就是,打开StdAfx.cpp,编译一下(报错不管),关掉这个cpp,再编译一开始那个就解决了



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3